home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / tools / s_tool / jx250.c < prev    next >
Text File  |  1999-06-08  |  10KB  |  401 lines

  1. #include    "JX250.H"
  2. #include    <sys\iocs.h>
  3. #include    <sys\dos.h>
  4. #include    <sys\scsi.h>
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7.  
  8.  
  9. //====== 環境ファイルに記録
  10. //--- SCSI ID
  11. int    SCSI_ID;
  12. //--- プリ座標
  13. int    PreX1,PreY1;
  14. int    PreX2,PreY2;    // 
  15. int    PreXV1,PreYV1;    // 表示座標に変換した物
  16. int    PreXV2,PreYV2;
  17. int    PreBai;        // 0;標準 1;x2 2;x3 3;x4
  18. int    PrePX,PrePY;    // 拡大表示の時のイメージ表示座標
  19. int    PreViewS;    // 0;画質。1;速度
  20. //--- スキャンサイズ
  21. int    ScanDpiX,ScanDpiY;
  22. int    ScanDotX,ScanDotY;
  23. int    ScanSpeed;    // 0;低速。1;速度
  24. //--- 補正
  25. int    Bright;        // 濃度
  26. int    LightM;        // 明度
  27. int    LightR;        // 明度
  28. int    LightG;        // 明度
  29. int    LightB;        // 明度
  30. int    GammaM;        // γ *100 の値
  31. int    GammaR;        // γ
  32. int    GammaG;        // γ
  33. int    GammaB;        // γ
  34. int    ThreM;        // しきい値
  35. int    ThreR;        // しきい値
  36. int    ThreG;        // しきい値
  37. int    ThreB;        // しきい値
  38. //--- モード
  39. int    ScanMode;    // スキャン値の単位 0;DOT 1;DPI
  40. int    PreUnit;    // プリスキャン値の単位 0;dot 1;cm 2;inch
  41. int    ImageMode;    // 0;カラー 1;白黒
  42. int    ImageColMode;    // 0;多値 1;二値
  43. int    ImageDirec;    // 0;縦 1;横
  44. int    PojiNegaMode;    // 0;ポジ 1;ネガ
  45. int    DropColor;    // 0;なし 1;R 2;G 3;B
  46. int    FullColor;    // 0;64k color  1;24bit color
  47. int    C64halfMode;    // 0;中間処理あり 1;なし
  48. int    JpegedUseMode;    // 0;64k の時使用する 1;使用しない
  49. int    SaveFrmMode;    // 0;スキャンサイズに変更
  50. int    ReadPacketMode;    // 0;一括 1;分割
  51. //--- JPEG
  52. UNchar    JpegSwc[128];    // Jpeg セーブの文字列
  53. UNchar    Jpeg24Swc[128];    // Jpeg セーブの文字列
  54. UNchar    RGBtemp[128];    // EJ,DJ のテンポラリパス
  55. //--- その他
  56. int    AspMode;    // 「画像」の 0;(2:3) 1;(1:1)
  57. int    FilerSortMode;    // 0;dir 1;filename 2;日付 3;Size
  58. int    FilerAllMode;    // 0;関係ファイルのみ表示 1;全ファイル表示
  59.  
  60. //====== 非記録
  61. //--- 
  62. UNchar    *ScanData;    //「画像」データのポインタ
  63. int    ScanDataX;    //「画像」の大きさ
  64. int    ScanDataY;    //「画像」の大きさ
  65. UNchar    *PreData;    // [(232)*(480)*2];    // 「プリスキャン」データ
  66.  
  67. //===
  68. UNshort    olgtcl[16];
  69. UNchar    diabak[165*205*2];    // ダイアログ用のバッファ
  70. int    orgerrvct;
  71. char    CUR_path[256];        /*起動時のパス*/
  72.  
  73. int    jxscanner;    // 0;jx250  -1;jx330  1;jx350
  74. int    jxscanner_;    // ファイル名 -4;null  0;jx250  -1;jx330  1;jx350
  75. char    jxname[8][4]={
  76.             "","  ","32","33",
  77.             "25","35","27","  "
  78. };
  79. UNchar    *MAP;
  80. int    breakck;
  81.  
  82. void    END_DISP();
  83.  
  84. /*--------------------------------------------------*/
  85.  
  86. void main(ar,av)
  87. int    ar;
  88. UNchar    **av;
  89. {
  90. int    i;
  91. int    ssp;
  92. UNchar    cnfn[256];
  93. int    matfg;
  94. int    ggcfg;
  95. struct    _psp    *getpdb;
  96. matfg=0;
  97. ggcfg=0;
  98. breakck=_dos_breakck(-1);
  99. _dos_breakck(2);
  100. cnfn[0]=0;
  101. //--- 実行ファイル名チェック
  102. getpdb=_dos_getpdb();
  103. if ( getpdb->exe_name[6]=='2' && getpdb->exe_name[7]=='5' ){
  104.     jxscanner  = _JX250_;
  105.     jxscanner_ = _JX250_;
  106. } elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='5' ){
  107.     jxscanner  = _JX350_;
  108.     jxscanner_ = _JX350_;
  109. } elif ( getpdb->exe_name[6]=='2' && getpdb->exe_name[7]=='7' ){
  110.     jxscanner  = _JX270_;
  111.     jxscanner_ = _JX270_;
  112. } elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='3' ){
  113.     jxscanner  = _JX330_;
  114.     jxscanner_ = _JX330_;
  115. } elif ( getpdb->exe_name[6]=='3' && getpdb->exe_name[7]=='2' ){
  116.     jxscanner  = _JX325_;
  117.     jxscanner_ = _JX325_;
  118. } else {
  119.     jxscanner  = _JX250_;        // 0;jx250  -1;jx330  1;jx350
  120.     jxscanner_ = -4;
  121. }
  122. JxLogoChain();
  123. //----
  124. printf( "X68k SHARP JX-SCANNER 画像入力ツール Version 1.03 Copyright 1997-1999 満開製作所\n");
  125. //---- コマンドライン解析
  126. for(i=1;i<ar;i++){
  127.     if ( av[i][0]=='-' || av[i][0]=='/' ){
  128.         switch(av[i][1]|0x20){
  129.         case('s'):
  130.             PreViewS=1;    // 0;画質。1;速度
  131.             break;
  132.         case('x'):
  133.             FullColor=1;    // 0;64k color  1;24bit color
  134.             break;
  135.         case('i'):
  136.             //--- SCANNER ID
  137.             SCSI_ID=atoi(&av[i][2]);
  138.             break;
  139.         case('f'):
  140.             //--- コンフィグファイル指定
  141.             jstrcpy(cnfn,&av[i][2]);
  142.             break;
  143.         case('v'):
  144.             //--- MATIER の仮想画面に読み込む。
  145.             matfg=-1;
  146.             ggcfg=-1;
  147.             break;
  148.         case('c'):
  149.             ggcfg=-1;
  150.             break;
  151.         case('p'):
  152.         case('b'):
  153.         case('y'):
  154.             break;
  155.         case('h'):
  156.         case('?'):
  157.             Help();
  158.             return;
  159.         default:
  160.             printf(" スイッチが異常です。\n");
  161.             return;
  162.         }
  163.     } else {
  164.         printf(" コマンドラインが異常です。\n");
  165.         return;
  166.     }
  167. }
  168. //--- メモリ確保
  169. PreData=_dos_malloc( (232)*(480)*2 );    // 「プリスキャン」データ
  170. if ( PreData>=0x81000000 ){
  171.     i=(int)PreData;
  172.     i&=0x00FFFFFF;
  173.     printf(" メモリが足りません。後 %d byte 必要です。\n",((232)*(480)*2)-i);
  174.     printf( "\n [何かキーを押して下さい]");
  175.     _dos_kflushio(0xFF);
  176.     _dos_inkey();
  177.     _dos_kflushio(0xFF);
  178.     printf( "\n");
  179.     return;
  180. } else {
  181.     UNint    *MM;
  182.     MM=(void*)PreData;
  183.     for(i=0;i<((232)*(480)*2)/4;i++)
  184.         *MM++=0;
  185. }
  186. //-------- 初期化
  187. SCSI_ID=0;
  188. ScanMode=0;
  189. ScanDotX=512*DOTB;
  190. ScanDotY=512*DOTB;
  191. ScanDpiX=3000000;
  192. ScanDpiY=4500000;
  193. LightM=0x8000;        // 明度
  194. LightR=0x8000;
  195. LightG=0x8000;
  196. LightB=0x8000;
  197. Bright=128;        // 濃度
  198. GammaM=100;        // γ
  199. GammaR=100;
  200. GammaG=100;
  201. GammaB=100;
  202. ThreM=128;        // しきい値
  203. ThreR=128;
  204. ThreG=128;
  205. ThreB=128;
  206. RecSavMode=1;        // 0;CUT 1;PIC 2;JPEG 3;PIC2 4;JPEG 5;RGB
  207. GrayPoint=15;        // グレイスケールの値
  208. MonoPoint=15*8;        // 二値化の値
  209. AspMode=1;        //「画像」の 0;(2:3) 1;(1:1)
  210. C64halfMode=1;        // 0;中間処理あり 1;なし
  211. if ( _iocs_b_bpeek((void*)0x0cbc)==0 ){
  212.     // 000 機用
  213.     PreViewS=1;        // 0;画質。1;速度
  214.     ScanSpeed=1;        // 0;遅い。1;速い
  215.     JpegedUseMode=0;    // 0;64k の時使用する 1;使用しない
  216. } else {
  217.     // 0x0 機用
  218.     PreViewS=0;        // 0;画質。1;速度
  219.     ScanSpeed=1;        // 0;遅い。1;速い
  220.     JpegedUseMode=1;    // 0;64k の時使用する 1;使用しない
  221. }
  222. CalcScanDD();
  223. ReadPacketMode=1;        // 0;一括 1;分割
  224. //--- MAT チェック
  225. mat_vadds=0;
  226. if ( matfg!=0 ){
  227.     if ( MatDefRead() ){
  228.         printf( " -v は無視します。\n");
  229.         printf( "\n [何かキーを押して下さい]");
  230.         _dos_kflushio(0xFF);
  231.         _dos_inkey();
  232.         _dos_kflushio(0xFF);
  233.         printf( "\n");
  234.         matfg=0;
  235.                 //return;
  236.     } else {
  237.         ScanData=mat_vadds;
  238.         ScanDataX=mat_xwidth;
  239.         ScanDataY=mat_ywidth;
  240.         DataC=0;
  241.         DataX=mat_xwidth;
  242.     }
  243. }
  244. if ( ggcfg!=0 && ScanData==0 ){
  245.     UNint    *M,*N;
  246.     M=_dos_malloc(512*512*2);
  247.     if ( M>=0x81000000 ){
  248.         printf( " メモリが足りませんでした。\n");
  249.         printf( " G-RAM のデータは破棄します。\n");
  250.         printf( "\n [何かキーを押して下さい]");
  251.         _dos_kflushio(0xFF);
  252.         _dos_inkey();
  253.         _dos_kflushio(0xFF);
  254.         printf( "\n");
  255.     } else {
  256.         ScanData=M;
  257.         ssp=_iocs_b_super(0);
  258.         N=0xC00000;
  259.         for(i=0;i<0x80000/4;i++)
  260.             *M++=*N++;
  261.         if ( ssp>=0 )
  262.             _iocs_b_super(ssp);
  263.         ScanDataX=512;
  264.         ScanDataY=512;
  265.         DataX=512;
  266.         DataC=0;
  267.     }
  268. }
  269. //--- パスチェック
  270. GetDrvDir(0,CUR_path);
  271. GetDrvDir(0,Apath);
  272. //-- コンフィグファイルチェック
  273. ChDrvDir(CUR_path);
  274. ReadCnf(cnfn);
  275. //-- SCSI 機器チェック
  276. i=AutoSreachJX(SCSI_ID,0);        // 指定の機種はあるか?
  277. if ( i>=0 && i<=15 ){
  278.     SCSI_ID=i;
  279. } else {
  280.     i=AutoSreachJX(SCSI_ID,0);    // なんかある?
  281.     if ( i>=0 && i<=15 )
  282.         SCSI_ID=i;
  283. }
  284. //--- アボート&キー設定
  285. _dos_fnckeygt(0,FncKeyOrg);        //オリジナルのファンクションキーを記憶
  286. orgerrvct=(int)_dos_intvcs(0xFFF1,(void*)END_DISP);
  287. _dos_fnckeyst(0,FncKeyJX);        // JX のファンクションキーをセット
  288. //--- 画面準備
  289. ssp=_iocs_b_super(0);
  290. for(i=0;i<16;i++)
  291.     olgtcl[i]=*(UNshort*)(0xe82200+i*2);
  292. if ( ssp>=0 )
  293.     _iocs_b_super(ssp);
  294. _iocs_tgusemd(0,2);
  295. _iocs_tgusemd(1,2);
  296. mouse(1);
  297. _dos_c_curoff();
  298. _iocs_crtmod(12);
  299. _iocs_g_clr_on();
  300. TXCLS(0);
  301. SetMsPat();
  302. MsPat(-1);
  303. //--
  304. InitScrren();
  305. //--------
  306. for(;;){
  307.     move();
  308.     if ( Dialog(0,"環境を記録しますか?",0,2)!=0 )
  309.         break;    // いいえ=おわり
  310.     ChDrvDir(CUR_path);
  311.     if ( CreateCnf(cnfn)==0 )
  312.         break;    // 成功=おわり
  313.     i=Dialog(
  314.         "環境ファイルの書き出しに失",
  315.         "敗しました。終了してもよろ",
  316.         "しいですか?",
  317.         2
  318.     );
  319.     if ( i==0 )
  320.         break;    // よろしい=おわり
  321. }
  322. if ( ggcfg!=0 && ScanData!=0 ){
  323.     //printf(" 画面は残す~\n");
  324.     RecVwBai=0;
  325.     END_DISP_();
  326.     _iocs_b_wpoke((void*)0xE82600,0x193F);
  327.     ScanGraphView(0,0,1);
  328.     return;
  329. }
  330. END_DISP();
  331. }
  332. /*****************************************
  333.     終わり
  334. **************************************/
  335. void    END_DISP()
  336. {
  337. _iocs_g_clr_on();
  338. _iocs_crtmod(16);
  339. _dos_c_fnkmod(0);
  340. egs_sub();
  341. END_DISP_();
  342. exit(0);
  343. }
  344. /*+++++++++++*/
  345. void    END_DISP_()
  346. {
  347. int    i,ssp;
  348. TXCLS(1);    //全TEXT 掃除
  349. ssp=_iocs_b_super(0);
  350.     if ( olgtcl[15]!=0 ){
  351.         for(i=0;i<16;i++)
  352.             *(UNshort*)(0xe82200+i*2)=olgtcl[i];
  353.     }
  354.     *(UNchar*)0xe8e007&=0xFD;
  355. if ( ssp>=0 )
  356.     _iocs_b_super(ssp);
  357. _dos_c_curon();
  358. mouse(2);
  359. mouse(0);
  360. _dos_kflushio(0xFF);
  361. _dos_breakck(0);    /*break on*/
  362. _iocs_tgusemd(0,0);
  363. _iocs_tgusemd(1,1);
  364. _dos_intvcs(0xFFF1,(void*)orgerrvct);
  365. _dos_fnckeyst(0,FncKeyOrg);        //オリジナルのファンクションキーをセット
  366. ChDrvDir(CUR_path);
  367. _dos_breakck(breakck);
  368. }
  369. /*****************************************
  370.     ヘルプ
  371. **************************************/
  372. void    Help()
  373. {
  374. char    *ss;
  375. ss=jxname[jxscanner_+4];
  376. printf(    "\n"
  377.     "[使用法] S_TOOL%s.x [switch]\n"
  378.     "\n"
  379.     "  [switch]\n"
  380.     "    -V ・・・・・・・・・・・・ MATIER の仮想画面に読み込む。環境変数`MATIER'\n"
  381.     "            の設定が必要です。\n"
  382.     "    -C ・・・・・・・・・・・・ 起動時、G-RAM の画像をスキャン画像とし、\n"
  383.     "            終了時、スキャン画像を表示する。\n"
  384. //    "    -A ・・・・・・・・・・・・ 起動後スキャニングし終了する。画像データは\n"
  385. //    "            VRAM に残る。\n"
  386. //    "    -1 ・・・・・・・・・・・・ 画像画面を 1:1 にする。\n"
  387.     "    -I[n] ・・・・・・・・・ JX-SCANNER の接続している SCSI-ID を指定。\n"
  388. //    "    -S ・・・・・・・・・・・・ プレスキャン、画像より速度を優先させる。\n"
  389.     "    -F[cnfname] ・・・ 環境ファイル名を指定。指定がない場合\n"
  390.     "            S_TOOL%s.x と同じディレクトリの S_TOOL%s.CNF\n"
  391.     "            を使用する。\n"
  392. //    "    -W[path] ・・・・・・ メモリがたりない場合のテンポラリファイルのパ\n"
  393. //    "            スを指定する。指定がない場合メモリ切れで中断\n"
  394. //    "            する\n"
  395.     "\n"
  396. //    "        環境変数`JX250'がコマンドラインに付加されます。\n"
  397. //    "\n"
  398.     ,ss,ss,ss,ss
  399. );
  400. }
  401.